#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>

// 常用宏定义
#define FOPEN_ERR(FP)           \
    if (NULL == FP)             \
    {                           \
        perror("fopen error:"); \
        return 0;               \
    }                           \
    // char *dest, const char *src

int main(int argc, char const *argv[])
{
    if (3 != argc)
    {
        printf("格式错误 : %s file_dest file_src\n", argv[0]);
        return 0;
    }

    // 打开文件
    FILE *fp_dest = fopen(argv[1], "w+"); // 写入文件
    FOPEN_ERR(fp_dest);

    FILE *fp_src = fopen(argv[2], "r+"); // 读取文件
    FOPEN_ERR(fp_src);

    // 移动到文件头部

    fseek(fp_dest, 0, SEEK_SET);
    fseek(fp_dest, 0, SEEK_SET);

    char buf[1024]; // 临时缓冲区

    memset(buf, 0, sizeof(buf));
    int loop_count = 0; // 初始化循环计数器
    int byte = 0;
    while ((byte = fread(buf, 1, sizeof(buf), fp_src)) > 0)
    {   printf("%d",byte);
        fwrite(buf, 1, byte, fp_dest);
        loop_count++; // 每次循环增加计数器
    }
    printf("循环次数: %d\n", loop_count); // 打印循环次数

    fclose(fp_dest);
    fclose(fp_src);

    return 0;
}
